package com.cskaoyan.javase.oop1._16access._3why;

/**
 * 为什么要使用访问权限修饰符/访问权限修饰符的作用
 * 毫无疑问,访问权限修饰符是用来控制访问级别的.
 *
 * 那么就像给门加锁，是警告你不能逾越界限，否则就是违法操作一样。
 * 访问权限的使用，最基本的，自然是用来控制访问权限的（这是废话）。
 * 但也隐含了警告和暗示的作用：
 * 告诉代码的使用者，哪些地方不要触碰，哪些地方应该使用。
 * 起到警告、约束和指导代码使用者的功能。
 *
 * 具体来说:
 *      1.对于需要外界访问/就是专门提供给外界服务的方法,用public修饰
 *          告诉别人"我是可以使用的"
 *        对于不需要外界访问/实现某些方法的过程方法/中间方法,用private
 *          告诉别人"我不需要被使用,不需要被关注"
 *        过程方法/中间方法,应该私有化(非常重要!)
 *
 *       2.工具类.类中的所有方法都是static修饰的静态方法,调用时直接类名点
 *          无需创建对象
 *          那么这个类就完全不需要被创建对象
 *          那就不让外界能够创建对象
 *          所有工具类都应该私有化构造器
 *
 *       3.某些设计模式,比如工厂,单例等模式.
 *          工厂指的是: 找一个"工厂"来生产对象,必然要私有化构造器,
 *              要对象就去找工厂
 *          单例: 指的是在整个JVM全局,某个类的对象仅有一个,这就是单例
 *              必然要私有化构造器的
 *
 * 如果你能够严格按照上述描述使用访问权限修饰符，那么好处是显而易见的：
 *
 * 把代码的开发者和代码的使用者给区分开来了：
 *
 * 代码使用者无需关心没有访问权限的代码，仅需要关心具有访问权限的部分就可以了。
 * 私有或者没有访问权限的部分，既然不让我看，不让我用，那我就老老实实不看，不用。
 * 实际上，当你去使用别人的代码时，你也不希望需要完全读懂所有代码，才能够使用吧？
 *
 * 代码开发者，可以自由的开发，对外界没有访问权限部分的代码。
 * 这些私有的，或者对外界不可见部分的代码，叫做隐藏代码的具体实现细节，可以很方便的修改代码实现。
 * 想一想，如果一个方法是public修饰的，在外界多处被使用，你敢随便就动这个方法代码吗？
 *
 * 所以说,我们在使用访问权限时要遵循什么原则呢?
 * 要尽量少的给权限,尽量私有化,不能私有化的,先从默认权限 开始考虑
 * 只有确定,一定需要被外界直接访问的,才给public权限
 * 尽量少个public
 *
 * @since 10:52
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class A {
    // test方法专门提供给外界使用,所以public修饰它
    public void test() {
        // 在实现test方法的过程中,需要调用test2()方法
        test2();
    }

    // test2方法是一个过程方法,应该私有化它
    // Access can be private
    private void test2() {
        test3();
    }

    private void test3() {

    }
}